home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / util / moni / Scout-src.lha / source / objects / scout_windows_detail.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-09-17  |  25.4 KB  |  540 lines

  1. /**
  2.  * Scout - The Amiga System Monitor
  3.  *
  4.  *------------------------------------------------------------------
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  *
  20.  * You must not use this source code to gain profit of any kind!
  21.  *
  22.  *------------------------------------------------------------------
  23.  *
  24.  * @author Andreas Gelhausen
  25.  * @author Richard Körber <rkoerber@gmx.de>
  26.  */
  27.  
  28. #include "system_headers.h"
  29.  
  30. static struct LongFlag screenFlags1[] = {
  31.     { SHOWTITLE,    "SHOWTITLE",    "$0010" },
  32.     { BEEPING,      "BEEPING",      "$0020" },
  33.     { CUSTOMBITMAP, "CUSTOMBITMAP", "$0040" },
  34.     { SCREENBEHIND, "SCREENBEHIND", "$0080" },
  35.     { SCREENQUIET,  "SCREENQUIET",  "$0100" },
  36.     { SCREENHIRES,  "SCREENHIRES",  "$0200" },
  37.     { PENSHARED,    "PENSHARED",    "$0400" },
  38.     { NS_EXTENDED,  "NS_EXTENDED",  "$1000" },
  39.     { AUTOSCROLL,   "AUTOSCROLL",   "$4000" },
  40.     { 0,            NULL,           NULL }
  41. };
  42.  
  43. static struct MaskedLongFlag screenFlags2[] = {
  44.     { WBENCHSCREEN, SCREENTYPE, "WBENCHSCREEN", "$0001" },
  45.     { PUBLICSCREEN, SCREENTYPE, "PUBLICSCREEN", "$0002" },
  46.     { CUSTOMSCREEN, SCREENTYPE, "CUSTOMSCREEN", "$000F" },
  47.     { 0,            0,          NULL,           NULL }
  48. };
  49.  
  50. static struct LongFlag pubScreenFlags[] = {
  51.     { PSNF_PRIVATE, "PSNF_PRIVATE", "0x0001" },
  52.     { 0,            NULL,           NULL }
  53. };
  54.  
  55. static struct LongFlag windowFlags1[] = {
  56.     { WFLG_SIZEGADGET,    "WFLG_SIZEGADGET",    "$00000001" },
  57.     { WFLG_DRAGBAR,       "WFLG_DRAGBAR",       "$00000002" },
  58.     { WFLG_DEPTHGADGET,   "WFLG_DEPTHGADGET",   "$00000004" },
  59.     { WFLG_CLOSEGADGET,   "WFLG_CLOSEGADGET",   "$00000008" },
  60.     { WFLG_SIZEBRIGHT,    "WFLG_SIZEBRIGHT",    "$00000010" },
  61.     { WFLG_SIZEBBOTTOM,   "WFLG_SIZEBBOTTOM",   "$00000020" },
  62.     { WFLG_BACKDROP,      "WFLG_BACKDROP",      "$00000100" },
  63.     { WFLG_REPORTMOUSE,   "WFLG_REPORTMOUSE",   "$00000200" },
  64.     { WFLG_GIMMEZEROZERO, "WFLG_GIMMEZEROZERO", "$00000400" },
  65.     { WFLG_BORDERLESS,    "WFLG_BORDERLESS",    "$00000800" },
  66.     { WFLG_ACTIVATE,      "WFLG_ACTIVATE",      "$00001000" },
  67.     { WFLG_WINDOWACTIVE,  "WFLG_WINDOWACTIVE",  "$00002000" },
  68.     { WFLG_INREQUEST,     "WFLG_INREQUEST",     "$00004000" },
  69.     { WFLG_MENUSTATE,     "WFLG_MENUSTATE",     "$00008000" },
  70.     { WFLG_RMBTRAP,       "WFLG_RMBTRAP",       "$00010000" },
  71.     { WFLG_NOCAREREFRESH, "WFLG_NOCAREREFRESH", "$00020000" },
  72.     { WFLG_NEWLOOKMENUS,  "WFLG_NEWLOOKMENUS",  "$00200000" },
  73.     { WFLG_NW_EXTENDED,   "WFLG_NW_EXTENDED",   "$00040000" },
  74.     { WFLG_WINDOWREFRESH, "WFLG_WINDOWREFRESH", "$01000000" },
  75.     { WFLG_WBENCHWINDOW,  "WFLG_WBENCHWINDOW",  "$02000000" },
  76.     { WFLG_WINDOWTICKED,  "WFLG_WINDOWTICKED",  "$04000000" },
  77.     { WFLG_VISITOR,       "WFLG_VISITOR",       "$08000000" },
  78.     { WFLG_ZOOMED,        "WFLG_ZOOMED",        "$10000000" },
  79.     { WFLG_HASZOOM,       "WFLG_HASZOOM",       "$20000000" },
  80.     { 0,                  NULL,                 NULL }
  81. };
  82.  
  83. static struct MaskedLongFlag windowFlags2[] = {
  84.    { WFLG_SMART_REFRESH,  WFLG_REFRESHBITS, "WFLG_SMART_REFRESH",  "$00000000" },
  85.    { WFLG_SIMPLE_REFRESH, WFLG_REFRESHBITS, "WFLG_SIMPLE_REFRESH", "$00000040" },
  86.    { WFLG_SUPER_BITMAP,   WFLG_REFRESHBITS, "WFLG_SUPER_BITMAP",   "$00000080" },
  87.    { WFLG_OTHER_REFRESH,  WFLG_REFRESHBITS, "WFLG_OTHER_REFRESH",  "$000000C0" },
  88.    { 0,                   0,                NULL,                  NULL }
  89. };
  90.  
  91. static struct LongFlag idcmpFlags[] = {
  92.    { IDCMP_SIZEVERIFY,     "IDCMP_SIZEVERIFY",     "$00000001" },
  93.    { IDCMP_NEWSIZE,        "IDCMP_NEWSIZE",        "$00000002" },
  94.    { IDCMP_REFRESHWINDOW,  "IDCMP_REFRESHWINDOW",  "$00000004" },
  95.    { IDCMP_MOUSEBUTTONS,   "IDCMP_MOUSEBUTTONS",   "$00000008" },
  96.    { IDCMP_MOUSEMOVE,      "IDCMP_MOUSEMOVE",      "$00000010" },
  97.    { IDCMP_GADGETDOWN,     "IDCMP_GADGETDOWN",     "$00000020" },
  98.    { IDCMP_GADGETUP,       "IDCMP_GADGETUP",       "$00000040" },
  99.    { IDCMP_REQSET,         "IDCMP_REQSET",         "$00000080" },
  100.    { IDCMP_MENUPICK,       "IDCMP_MENUPICK",       "$00000100" },
  101.    { IDCMP_CLOSEWINDOW,    "IDCMP_CLOSEWINDOW",    "$00000200" },
  102.    { IDCMP_RAWKEY,         "IDCMP_RAWKEY",         "$00000400" },
  103.    { IDCMP_REQVERIFY,      "IDCMP_REQVERIFY",      "$00000800" },
  104.    { IDCMP_REQCLEAR,       "IDCMP_REQCLEAR",       "$00001000" },
  105.    { IDCMP_MENUVERIFY,     "IDCMP_MENUVERIFY",     "$00002000" },
  106.    { IDCMP_NEWPREFS,       "IDCMP_NEWPREFS",       "$00004000" },
  107.    { IDCMP_DISKINSERTED,   "IDCMP_DISKINSERTED",   "$00008000" },
  108.    { IDCMP_DISKREMOVED,    "IDCMP_DISKREMOVED",    "$00010000" },
  109.    { IDCMP_WBENCHMESSAGE,  "IDCMP_WBENCHMESSAGE",  "$00020000" },
  110.    { IDCMP_ACTIVEWINDOW,   "IDCMP_ACTIVEWINDOW",   "$00040000" },
  111.    { IDCMP_INACTIVEWINDOW, "IDCMP_INACTIVEWINDOW", "$00080000" },
  112.    { IDCMP_DELTAMOVE,      "IDCMP_DELTAMOVE",      "$00100000" },
  113.    { IDCMP_VANILLAKEY,     "IDCMP_VANILLAKEY",     "$00200000" },
  114.    { IDCMP_INTUITICKS,     "IDCMP_INTUITICKS",     "$00400000" },
  115.    { IDCMP_IDCMPUPDATE,    "IDCMP_IDCMPUPDATE",    "$00800000" },
  116.    { IDCMP_MENUHELP,       "IDCMP_MENUHELP",       "$01000000" },
  117.    { IDCMP_CHANGEWINDOW,   "IDCMP_CHANGEWINDOW",   "$02000000" },
  118.    { IDCMP_GADGETHELP,     "IDCMP_GADGETHELP",     "$04000000" },
  119.    { IDCMP_LONELYMESSAGE,  "IDCMP_LONELYMESSAGE",  "$80000000" },
  120.    { 0,                    NULL,                   NULL }
  121. };
  122.  
  123. static void SetDetails( struct IClass *cl,
  124.                         Object *obj,
  125.                         struct WindowEntry *we )
  126. {
  127.     struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  128.  
  129.     if (stricmp(we->we_Type, "SCREEN") == 0) {
  130.         struct Screen *screen = (struct Screen *)we->we_Addr;
  131.         APTR addgroup;
  132.         APTR screenmoretext0,screenmoretext1,screenmoretext2,screenmoretext3;
  133.         APTR screenmoretext4,screenmoretext5a,screenmoretext5b,screenmoretext6,screenmoretext7;
  134.         APTR screenmoretext8,screenmoretext9,screenmoretext10;
  135.         APTR screenmoretext11,screenmoretext12,screenmoretext13,screenmoretext14,screenmoretext15;
  136.         APTR AddGroup1,AddGroup2;
  137.         struct List *publist;
  138.         ULONG id;
  139.  
  140.         Child, addgroup = HGroup,
  141.             Child, VGroup,
  142.                 Child, MyLabel2("Title:"),
  143.                 Child, MyLabel2("DefaultTitle:"),
  144.                 Child, MyVSpace(0),
  145.                 Child, MyLabel2("LeftEdge:\nTopEdge:\nWidth:\nHeight:\nDetailPen:"),
  146.                 Child, MyVSpace(0),
  147.                 Child, MyLabel2("ScreenMode:"),
  148.                 Child, MyLabel2("NextScreen:\nFirstWindow:"),
  149.                 Child, AddGroup1 = VGroup, MUIA_ShowMe, FALSE,
  150.                     Child, MyLabel2("PublicName:"),
  151.                     Child, MyLabel2("SigTask:"),
  152.                 End,
  153.             End,
  154.             Child, VGroup, MUIA_Group_SameWidth, TRUE,
  155.                 Child, screenmoretext0 = MyTextObject(),
  156.                 Child, screenmoretext1 = MyTextObject(),
  157.  
  158.                 Child, HGroup,
  159.                     Child, screenmoretext2 = MyTextObject2(),
  160.                     Child, MyLabel("BarVBorder:\nBarHBorder:\nMenuVBorder:\nMenuHBorder:\nBlockPen:"),
  161.                     Child, screenmoretext3 = MyTextObject2(),
  162.                     Child, MyLabel("WBorTop:\nWBorLeft:\nWBorRight:\nWBorBottom:\nDepth:"),
  163.                     Child, screenmoretext4 = MyTextObject2(),
  164.                     Child, VGroup,
  165.                         Child, MyLabel("MouseY:\nMouseX:\nBarHeight:\nSaveColor0:"),
  166.                         Child, MyLabel("Flags:"),
  167.                     End,
  168.                     Child, VGroup, MUIA_Group_SameWidth, TRUE, MUIA_Weight, 0,
  169.                         Child, screenmoretext5a = MyTextObject(),
  170.                         Child, screenmoretext5b = MakeButton(""),
  171.                     End,
  172.                 End,
  173.  
  174.                 Child, HGroup, MUIA_Group_SameWidth, TRUE,
  175.                     Child, screenmoretext10 = MyTextObject(),
  176.                     Child, HGroup,
  177.                         Child, MyLabel2("Font:"),
  178.                         Child, screenmoretext9 = MyTextObject(),
  179.                     End,
  180.                 End,
  181.  
  182.                 Child, HGroup,
  183.                     Child, screenmoretext6 = MyTextObject2(),
  184.                     Child, MyLabel("FirstGadget:\nBarLayer:"),
  185.                     Child, screenmoretext7 = MyTextObject2(),
  186.                     Child, MyLabel("ExtData:\nUserData:"),
  187.                     Child, screenmoretext8 = MyTextObject2(),
  188.                 End,
  189.  
  190.                 Child, AddGroup2 = HGroup, MUIA_ShowMe, FALSE,
  191.                     Child, VGroup,
  192.                         Child, HGroup,
  193.                             Child, screenmoretext11 = MyTextObject(),
  194.                             Child, HGroup, MUIA_Weight, 0,
  195.                                 Child, MyLabel ("Flags:"),
  196.                                 Child, screenmoretext12 = MakeButton(""),
  197.                             End,
  198.                         End,
  199.                         Child, screenmoretext13 = MyTextObject(),
  200.                     End,
  201.                     Child, VGroup,
  202.                         Child, MyLabel2("Visitors:"),
  203.                         Child, MyLabel2("SigBit:"),
  204.                     End,
  205.                     Child, VGroup, MUIA_Group_SameWidth, TRUE,
  206.                         Child, screenmoretext14 = MyTextObject(),
  207.                         Child, screenmoretext15 = MyTextObject2(),
  208.                     End,
  209.                 End,
  210.             End,
  211.         End;
  212.  
  213.         DoMethod(wdwd->wdwd_MainGroup, MUIM_Group_InitChange);
  214.         DoMethod(wdwd->wdwd_MainGroup, OM_ADDMEMBER, addgroup);
  215.         DoMethod(wdwd->wdwd_MainGroup, MUIM_Group_ExitChange);
  216.  
  217.         set(obj, MUIA_Window_ActiveObject, screenmoretext5b);
  218.  
  219.         DoMethod(screenmoretext5b, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_WindowsDetailWin_ScreenFlagsMore);
  220.         DoMethod(screenmoretext12, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_WindowsDetailWin_PubScreenFlagsMore);
  221.  
  222.         MySetContents(screenmoretext0, nonetest(screen->Title));
  223.         MySetContents(screenmoretext1, screen->DefaultTitle);
  224.         MySetContents(screenmoretext2, MUIX_R "%ld\n%ld\n%3ld\n%ld\n%ld", screen->LeftEdge, screen->TopEdge, screen->Width, screen->Height, screen->DetailPen);
  225.         MySetContents(screenmoretext3, MUIX_R "%ld\n%ld\n%3ld\n%ld\n%ld", screen->BarVBorder, screen->BarHBorder, screen->MenuVBorder, screen->MenuHBorder, screen->BlockPen);
  226.         MySetContents(screenmoretext4, MUIX_R "%ld\n%ld\n%3ld\n%ld\n%ld", screen->WBorTop, screen->WBorLeft, screen->WBorRight, screen->WBorBottom, GetBitMapAttr(screen->RastPort.BitMap, BMA_DEPTH));
  227.         MySetContents(screenmoretext5a, MUIX_R "%ld\n%ld\n%ld\n%ld", screen->MouseY, screen->MouseX, screen->BarHeight, screen->SaveColor0);
  228.         MySetContents(screenmoretext5b, MUIX_B "$%04lx", screen->Flags);
  229.         MySetContents(screenmoretext6, MUIX_R "$%08lx\n$%08lx", screen->NextScreen, screen->FirstWindow);
  230.         MySetContents(screenmoretext7, MUIX_R "$%08lx\n$%08lx", screen->FirstGadget, screen->BarLayer);
  231.         MySetContents(screenmoretext8, MUIX_R "$%08lx\n$%08lx", screen->ExtData, screen->UserData);
  232.         MySetContents(screenmoretext9, "%s/%ld", screen->Font->ta_Name, screen->Font->ta_YSize);
  233.  
  234.         if (publist = LockPubScreenList()) {
  235.             struct PubScreenNode *psn;
  236.  
  237.             ITERATE_LIST(publist, struct PubScreenNode *, psn) {
  238.                 if (psn->psn_Screen == screen) {
  239.                     set(AddGroup1, MUIA_ShowMe, TRUE);
  240.                     set(AddGroup2, MUIA_ShowMe, TRUE);
  241.  
  242.                     MySetContents(screenmoretext11, psn->psn_Node.ln_Name);
  243.                     MySetContents(screenmoretext12, MUIX_B "$%04lx", psn->psn_Flags);
  244.                     MySetContents(screenmoretext14, MUIX_R "%ld", psn->psn_VisitorCount);
  245.                     if (psn->psn_SigBit != -1) {
  246.                         MySetContents(screenmoretext15, MUIX_R "%ld", psn->psn_SigBit);
  247.                     } else {
  248.                         MySetContents(screenmoretext15, MUIX_R "---");
  249.                     }
  250.                     GetTaskName(psn->psn_SigTask, wdwd->wdwd_WinScrTaskName, sizeof(wdwd->wdwd_WinScrTaskName));
  251.                     MySetContents(screenmoretext13, wdwd->wdwd_WinScrTaskName);
  252.  
  253.                     wdwd->wdwd_PubScreen = psn;
  254.                     break;
  255.                 }
  256.             }
  257.  
  258.             UnlockPubScreenList();
  259.         }
  260.  
  261.         if (id = GetVPModeID (&screen->ViewPort)) {
  262.             UBYTE *tmp;
  263.  
  264.             if (tmp = tbAllocVecPooled(globalPool, PATH_LENGTH)) {
  265.                 APTR handle;
  266.  
  267.                 if (handle = FindDisplayInfo(id)) {
  268.                     if (GetDisplayInfoData(handle, tmp, sizeof(struct NameInfo), DTAG_NAME, 0)) {
  269.                         MySetContents(screenmoretext10, "%s ($%08lx)", ((struct NameInfo *)tmp)->Name, id);
  270.                     } else {
  271.                         struct MonitorSpec *mspc;
  272.  
  273.                         if (mspc = OpenMonitor(NULL, id)) {
  274.                             ULONG i = 0;
  275.                             struct DimensionInfo diminfo;
  276.  
  277.                             NameCopy(tmp, mspc->ms_Node.xln_Name);
  278.  
  279.                             GetDisplayInfoData(handle, (UBYTE *)&diminfo, sizeof(struct DimensionInfo), DTAG_DIMS, 0);
  280.                             _snprintf(&tmp[strlen(tmp)], PATH_LENGTH - i, "%ld x %ld ($%08lx)", diminfo.Nominal.MaxX - diminfo.Nominal.MinX + 1, diminfo.Nominal.MaxY - diminfo.Nominal.MinY + 1, id);
  281.                             MySetContents(screenmoretext10, tmp);
  282.                             CloseMonitor(mspc);
  283.                         }
  284.                     }
  285.                 }
  286.  
  287.                 tbFreeVecPooled(globalPool, tmp);
  288.             }
  289.         }
  290.  
  291.         set(obj, MUIA_Window_Title, MyGetChildWindowTitle("SCREEN", we->we_Title, wdwd->wdwd_Title, sizeof(wdwd->wdwd_Title)));
  292.     } else {
  293.         struct Window *win = (struct Window *)we->we_Addr;
  294.         APTR addgroup;
  295.         APTR winmoretext0,winmoretext1,winmoretext2,winmoretext3,winmoretext4;
  296.         APTR winmoretext5,winmoretext6a,winmoretext6b,winmoretext7a,winmoretext7b,winmoretext8,winmoretext9;
  297.         APTR winmoretext10,winmoretext11,winmoretext12,winmoretext13,winmoretext14;
  298.  
  299.         Child, addgroup = HGroup,
  300.             Child, VGroup, MUIA_Group_SameWidth, TRUE,
  301.                 Child, MyLabel2("Title:"),
  302.                 Child, MyLabel2("ScreenTitle:"),
  303.                 Child, MyLabel2("LeftEdge:\nTopEdge:\nMinWidth:\nMinHeight:\nBorderRight:\nBorderBottom:"),
  304.                 Child, MyLabel2("NextWindow:\nFirstRequest:\nRPort:\nParent:\nExtData:"),
  305.                 Child, MyLabel2("IDCMPFlags:"),
  306.                 Child, MyLabel2("ReqCount:"),
  307.                 Child, MyLabel2("UserPort:"),
  308.                 Child, MyLabel2("WindowPort:"),
  309.             End,
  310.             Child, VGroup, MUIA_Group_SameWidth, TRUE,
  311.                 Child, winmoretext0 = MyTextObject(),
  312.                 Child, winmoretext1 = MyTextObject(),
  313.                 Child, HGroup,
  314.                     Child, winmoretext2 = MyTextObject2(),
  315.                     Child, MyLabel("Width:\nHeight:\nMaxWidth:\nMaxHeight:\nPtrHeight:\nPtrWidth:"),
  316.                     Child, winmoretext3 = MyTextObject2(),
  317.                     Child, MyLabel("MouseY:\nMouseX:\nBorderLeft:\nBorderTop:\nXOffset:\nYOffset:"),
  318.                     Child, winmoretext4 = MyTextObject2(),
  319.                     Child, MyLabel("DetailPen:\nBlockPen:\nGZZMouseX:\nGZZMouseY:\nGZZWidth:\nGZZHeight:"),
  320.                     Child, winmoretext5 = MyTextObject2(),
  321.                 End,
  322.                 Child, HGroup,
  323.                     Child, VGroup, MUIA_Group_SameWidth, TRUE, MUIA_Weight, 0,
  324.                         Child, winmoretext6a = MyTextObject(),
  325.                         Child, winmoretext6b = MakeButton(""),
  326.                         Child, winmoretext9 = MyTextObject(),
  327.                         Child, winmoretext10 = MyTextObject(),
  328.                         Child, winmoretext11 = MyTextObject(),
  329.                     End,
  330.                     Child, VGroup, MUIA_Group_SameWidth, TRUE, MUIA_Weight, 60,
  331.                         Child, MyLabel("Flags:"),
  332.                         Child, MyLabel("DMRequest:\nBorderRPort:\nDescendant:\nMessageKey:\nUserData:"),
  333.                         Child, MyLabel("IFont:"),
  334.                         Child, MyLabel("-> SigTask:"),
  335.                         Child, MyLabel("-> SigTask:"),
  336.                     End,
  337.                     Child, VGroup,
  338.                         Child, HGroup,
  339.                             Child, VGroup, MUIA_Group_SameWidth, TRUE, MUIA_Weight, 0,
  340.                                 Child, winmoretext7a = MakeButton(""),
  341.                                 Child, winmoretext7b = MyTextObject(),
  342.                             End,
  343.                             Child, HGroup, MUIA_Weight, 60,
  344.                                 Child, MyLabel("MenuStrip:\nWScreen:\nFirstGadget:\nPointer:\nCheckMark:\nWLayer:"),
  345.                             End,
  346.                             Child, winmoretext8 = MyTextObject2(),
  347.                         End,
  348.                         Child, winmoretext12 = MyTextObject(),
  349.                         Child, winmoretext13 = MyTextObject(),
  350.                         Child, winmoretext14 = MyTextObject(),
  351.                     End,
  352.                 End,
  353.             End,
  354.         End;
  355.  
  356.         DoMethod(wdwd->wdwd_MainGroup, OM_ADDMEMBER, addgroup);
  357.  
  358.         set(obj, MUIA_Window_ActiveObject, winmoretext7a);
  359.  
  360.         DoMethod(winmoretext7a, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_WindowsDetailWin_WindowFlagsMore);
  361.         DoMethod(winmoretext6b, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_WindowsDetailWin_IDCMPFlagsMore);
  362.  
  363.         MySetContents(winmoretext0, nonetest(win->Title));
  364.         MySetContents(winmoretext1, nonetest(win->ScreenTitle));
  365.         MySetContents(winmoretext2, MUIX_R "%ld\n%ld\n%ld\n%ld\n%ld\n%ld", win->LeftEdge, win->TopEdge, win->MinWidth, win->MinHeight, win->BorderRight, win->BorderBottom);
  366.         MySetContents(winmoretext3, MUIX_R "%ld\n%ld\n%ld\n%ld\n%ld\n%ld", win->Width, win->Height, win->MaxWidth, win->MaxHeight, win->PtrHeight, win->PtrWidth);
  367.         MySetContents(winmoretext4, MUIX_R "%ld\n%ld\n%ld\n%ld\n%ld\n%ld", win->MouseY, win->MouseX, win->BorderLeft, win->BorderTop, win->XOffset, win->YOffset);
  368.         MySetContents(winmoretext5, MUIX_R "%ld\n%ld\n%ld\n%ld\n%ld\n%ld", win->DetailPen, win->BlockPen, win->GZZMouseX, win->GZZMouseY, win->GZZWidth, win->GZZHeight);
  369.         MySetContents(winmoretext6a, MUIX_R "$%08lx\n$%08lx\n$%08lx\n$%08lx\n$%08lx", win->NextWindow, win->FirstRequest, win->RPort, win->Parent, win->ExtData);
  370.         MySetContents(winmoretext6b, MUIX_B "$%08lx", win->IDCMPFlags);
  371.         MySetContents(winmoretext7a, MUIX_B "$%08lx", win->Flags);
  372.         MySetContents(winmoretext7b, MUIX_R "$%08lx\n$%08lx\n$%08lx\n$%08lx\n$%08lx", win->DMRequest, win->BorderRPort, win->Descendant, win->MessageKey, win->UserData);
  373.         MySetContents(winmoretext8, MUIX_R "$%08lx\n$%08lx\n$%08lx\n$%08lx\n$%08lx\n$%08lx", win->MenuStrip, win->WScreen, win->FirstGadget, win->Pointer, win->CheckMark, win->WLayer);
  374.         MySetContents(winmoretext9, MUIX_R "%ld", win->ReqCount);
  375.         MySetContents(winmoretext10, MUIX_R "$%08lx", win->UserPort);
  376.         MySetContents(winmoretext11, MUIX_R "$%08lx", win->WindowPort);
  377.  
  378.         MySetContents(winmoretext12, "%s/%ld", win->IFont->tf_Message.mn_Node.ln_Name, win->IFont->tf_YSize);
  379.  
  380.         if (win->UserPort) {
  381.             GetTaskName(win->UserPort->mp_SigTask, wdwd->wdwd_WinScrTaskName, sizeof(wdwd->wdwd_WinScrTaskName));
  382.             MySetContentsHealed(winmoretext13, wdwd->wdwd_WinScrTaskName);
  383.         }
  384.         if (win->WindowPort) {
  385.             GetTaskName(win->WindowPort->mp_SigTask, wdwd->wdwd_WinScrTaskName, sizeof(wdwd->wdwd_WinScrTaskName));
  386.             MySetContentsHealed(winmoretext14, wdwd->wdwd_WinScrTaskName);
  387.         }
  388.  
  389.         set(obj, MUIA_Window_Title, MyGetChildWindowTitle("WINDOW", we->we_Title, wdwd->wdwd_Title, sizeof(wdwd->wdwd_Title)));
  390.     }
  391. }
  392.  
  393. static ULONG __saveds mNew( struct IClass *cl,
  394.                             Object *obj,
  395.                             struct opSet *msg )
  396. {
  397.     APTR maingroup;
  398.  
  399.     if (obj = (Object *)DoSuperNew(cl, obj,
  400.         MUIA_HelpNode, WindowsText,
  401.         MUIA_Window_ID, MakeID('.','W','I','N'),
  402.         WindowContents, maingroup = HGroup,
  403.  
  404.         End,
  405.         TAG_MORE, msg->ops_AttrList))
  406.     {
  407.         struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  408.         APTR parent;
  409.  
  410.         wdwd->wdwd_MainGroup = maingroup;
  411.  
  412.         parent = (APTR)GetTagData(MUIA_Window_ParentWindow, (ULONG)NULL, msg->ops_AttrList);
  413.  
  414.         DoMethod(parent, MUIM_Window_AddChildWindow, obj);
  415.         DoMethod(obj,    MUIM_Notify,              MUIA_Window_CloseRequest, TRUE,  MUIV_Notify_Application, 5, MUIM_Application_PushMethod, parent, 2, MUIM_Window_RemChildWindow, obj);
  416.     }
  417.  
  418.     return (ULONG)obj;
  419. }
  420.  
  421. static ULONG __saveds mDispose( struct IClass *cl,
  422.                                 Object *obj,
  423.                                 struct opSet *msg )
  424. {
  425.     set(obj, MUIA_Window_Open, FALSE);
  426.  
  427.     return (DoSuperMethodA(cl, obj, msg));
  428. }
  429.  
  430. static ULONG __saveds mSet( struct IClass *cl,
  431.                             Object *obj,
  432.                             Msg msg )
  433. {
  434.     struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  435.     struct TagItem *tags, *tag;
  436.  
  437.     for (tags = ((struct opSet *)msg)->ops_AttrList; tag = NextTagItem(&tags); ) {
  438.         switch (tag->ti_Tag) {
  439.             case MUIA_Window_ParentWindow:
  440.                 DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, MUIV_Notify_Application, 5, MUIM_Application_PushMethod, tag->ti_Data, 2, MUIM_Window_RemChildWindow, obj);
  441.                 break;
  442.  
  443.             case MUIA_WindowsDetailWin_Object:
  444.                 wdwd->wdwd_Object = (struct WindowEntry *)tag->ti_Data;
  445.                 SetDetails(cl, obj, (struct WindowEntry *)tag->ti_Data);
  446.                 break;
  447.         }
  448.     }
  449.  
  450.     return (DoSuperMethodA(cl,obj,msg));
  451. }
  452.  
  453. static ULONG __saveds mScreenFlagsMore( struct IClass *cl,
  454.                                         Object *obj,
  455.                                         Msg msg )
  456. {
  457.     struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  458.     APTR flagsWin;
  459.  
  460.     if (flagsWin = FlagsWindowObject,
  461.             MUIA_Window_Title, "Screen Flags",
  462.             MUIA_Window_ParentWindow, obj,
  463.         End) {
  464.         DoMethod(flagsWin, MUIM_FlagsWin_ShowFlags, ((struct Screen *)wdwd->wdwd_Object->we_Addr)->Flags, MUIV_FlagsWin_FlagsType_Word, screenFlags1, screenFlags2, "Flags");
  465.     }
  466.  
  467.     return 0;
  468. }
  469.  
  470. static ULONG __saveds mPubScreenFlagsMore( struct IClass *cl,
  471.                                            Object *obj,
  472.                                            Msg msg )
  473. {
  474.     struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  475.     APTR flagsWin;
  476.  
  477.     if (wdwd->wdwd_PubScreen) {
  478.         if (flagsWin = FlagsWindowObject,
  479.                 MUIA_Window_Title, "PubScreen Flags",
  480.                 MUIA_Window_ParentWindow, obj,
  481.             End) {
  482.             DoMethod(flagsWin, MUIM_FlagsWin_ShowFlags, wdwd->wdwd_PubScreen->psn_Flags, MUIV_FlagsWin_FlagsType_Word, pubScreenFlags, NULL, "psn_Flags");
  483.         }
  484.     }
  485.  
  486.     return 0;
  487. }
  488.  
  489. static ULONG __saveds mWindowFlagsMore( struct IClass *cl,
  490.                                         Object *obj,
  491.                                         Msg msg )
  492. {
  493.     struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  494.     APTR flagsWin;
  495.  
  496.     if (flagsWin = FlagsWindowObject,
  497.             MUIA_Window_Title, "Window Flags",
  498.             MUIA_Window_ParentWindow, obj,
  499.         End) {
  500.         DoMethod(flagsWin, MUIM_FlagsWin_ShowFlags, ((struct Window *)wdwd->wdwd_Object->we_Addr)->Flags, MUIV_FlagsWin_FlagsType_Long, windowFlags1, windowFlags2, "Flags");
  501.     }
  502.  
  503.     return 0;
  504. }
  505.  
  506. static ULONG __saveds mIDCMPFlagsMore( struct IClass *cl,
  507.                                        Object *obj,
  508.                                        Msg msg )
  509. {
  510.     struct WindowsDetailWinData *wdwd = INST_DATA(cl, obj);
  511.     APTR flagsWin;
  512.  
  513.     if (flagsWin = FlagsWindowObject,
  514.             MUIA_Window_Title, "IDCMP Flags",
  515.             MUIA_Window_ParentWindow, obj,
  516.         End) {
  517.         DoMethod(flagsWin, MUIM_FlagsWin_ShowFlags, ((struct Window *)wdwd->wdwd_Object->we_Addr)->IDCMPFlags, MUIV_FlagsWin_FlagsType_Long, idcmpFlags, NULL, "IDCMP Flags");
  518.     }
  519.  
  520.     return 0;
  521. }
  522.  
  523. ULONG __asm __saveds WindowsDetailWinDispatcher( register __a0 struct IClass *cl,
  524.                                                  register __a2 Object *obj,
  525.                                                  register __a1 Msg msg )
  526. {
  527.     switch (msg->MethodID) {
  528.         case OM_NEW:                                   return (mNew(cl, obj, (APTR)msg));
  529.         case OM_DISPOSE:                               return (mDispose(cl, obj, (APTR)msg));
  530.         case OM_SET:                                   return (mSet(cl, obj, (APTR)msg));
  531.         case MUIM_WindowsDetailWin_ScreenFlagsMore:    return (mScreenFlagsMore(cl, obj, (APTR)msg));
  532.         case MUIM_WindowsDetailWin_PubScreenFlagsMore: return (mPubScreenFlagsMore(cl, obj, (APTR)msg));
  533.         case MUIM_WindowsDetailWin_WindowFlagsMore:    return (mWindowFlagsMore(cl, obj, (APTR)msg));
  534.         case MUIM_WindowsDetailWin_IDCMPFlagsMore:     return (mIDCMPFlagsMore(cl, obj, (APTR)msg));
  535.     }
  536.  
  537.     return (DoSuperMethodA(cl, obj, msg));
  538. }
  539.  
  540.